package com.hollysys.usersync.service;

import com.hollysys.usersync.entity.SyncResult;
import com.hollysys.usersync.entity.platform.Post;
import org.springframework.lang.Nullable;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * 岗位信息同步服务
 */
public interface SyncPostService {

    /**
     * 获得岗位信息字典
     *
     * @param key    字典键
     * @param value  字典值
     * @param filter 过滤条件
     * @return 岗位信息字典
     */
    <R, V> Map<R, V> getPostMap(@NotNull Function<Post, R> key, @NotNull Function<Post, V> value,
                                @Nullable Predicate<Post> filter);

    /**
     * 新增岗位
     *
     * @param postList 岗位实体列表
     * @return 操作结果
     */
    List<SyncResult> addPost(List<Post> postList);

    /**
     * 修改岗位信息
     *
     * @param postList 岗位实体列表
     * @return 成功修改的条数
     */
    List<SyncResult> updatePost(List<Post> postList);

    /**
     * 删除指定岗位信息
     *
     * @param postList 岗位实体列表
     * @return 操作结果
     */
    List<SyncResult> deletePost(List<Post> postList);

    /**
     * 将岗位code转换为id
     *
     * @param codeList 岗位code列表
     * @return 岗位code - ID字典
     */
    Map<String, String> convertPostCode2Id(List<String> codeList);

}
